package com.egoo.ticket.server.service.impl;

import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import com.egoo.ticket.server.dao.EwsUserDao;
import com.egoo.ticket.server.dao.FormTemplateDao;
import com.egoo.ticket.server.pojo.dto.FormTemplateInputDto;
import com.egoo.ticket.server.pojo.dto.PageOutputDto;
import com.egoo.ticket.server.pojo.entity.EwsUser;
import com.egoo.ticket.server.pojo.entity.FormTemplate;
import com.egoo.ticket.server.service.FormTemplateService;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.sql.Timestamp;
import java.util.ArrayList;
import java.util.List;

/**
 * @author Administrator
 */
@Service
@Slf4j
@Transactional(rollbackFor = Exception.class)
public class FormTemplateServiceImpl implements FormTemplateService {
	@Autowired
	FormTemplateDao formTemplateDao;
	@Autowired
	EwsUserDao ewsUserDao;

	@Override
	public Integer create(FormTemplateInputDto formTemplateInputDto) {
		String userId = formTemplateInputDto.getUserId();
		// 获取当前用户信息
		EwsUser ewsUser = ewsUserDao.selectById(userId);
		String ewsUserName = ewsUser.getName();
		String name = formTemplateInputDto.getName();
		JSONObject content = formTemplateInputDto.getContent();
		FormTemplate formTemplate = new FormTemplate();
		formTemplate.setName(name);
		formTemplate.setCreateUserId(userId);
		formTemplate.setCreateUserName(ewsUserName);
		formTemplate.setLastUserId(userId);
		formTemplate.setLastUserName(ewsUserName);
		Timestamp time = new Timestamp(System.currentTimeMillis());
		formTemplate.setCreateTime(time);
		formTemplate.setLastUpdateTime(time);
		formTemplate.setUseStatus(0);
		formTemplate.setContent(content);
		formTemplate.setTenantId(formTemplateInputDto.getTenantId());
		formTemplate.setUsedCustomFieldIds(getUsedCustomFieldId(content));
		return formTemplateDao.create(formTemplate);
	}

	/**
	 * @Author: Donny_dong
	 * @Description: 获取已使用的自定义字段id
	 * @Param:
	 * @return:
	 * @Date: 2020/3/18
	 */
	private String getUsedCustomFieldId(JSONObject content){
		JSONArray listArray = content.getJSONArray("list");
		ArrayList<Integer> arrayList = new ArrayList<>();
		for (int i = 0; i <listArray.size() ; i++) {
			Integer id = listArray.getJSONObject(i).getInteger("id");
			arrayList.add(id);
		}
		//如果是字符串数组或者集合，推荐使用String.join()
		String usedCustomFieldIds = StringUtils.join(arrayList, ",");
		return usedCustomFieldIds;
	}


	@Override
	public FormTemplate selectByEqualsName(String name,String tenantId) {
		return formTemplateDao.selectByEqualsName(name,tenantId);
	}

	@Override
	public FormTemplate selectContentById(Integer id) {
		FormTemplate formTemplate = formTemplateDao.selectContentById(id);
		JSONObject content = formTemplate.getContent();
		JSONArray list = content.getJSONArray("list");
		for (int i = 0; i < list.size(); i++) {
			String name = list.getJSONObject(i).getString("name");
			if (null == name) {
				list.remove(i);
			}
		}
		content.remove("list");
		content.put("list", list);
		formTemplate.setContent(content);
		return formTemplate;
	}

	@Override
	public PageOutputDto selectAll(Integer currentPage, Integer pageSize, String tenantId) {
		List<FormTemplate> formTemplateList = formTemplateDao.selectAll((currentPage - 1) * pageSize, pageSize,tenantId);
		Integer total = formTemplateDao.selectTotal(tenantId);
		PageOutputDto pageOutputDto = new PageOutputDto();
		pageOutputDto.setList(formTemplateList);
		pageOutputDto.setTotal(total);
		return pageOutputDto;
	}

	@Override
	public PageOutputDto selectByName(String name, Integer currentPage, Integer pageSize,String tenantId) {
		PageHelper.startPage(currentPage,pageSize);
		List<FormTemplate> formTemplateList = formTemplateDao.selectByName(name,tenantId);
		PageInfo<FormTemplate> formTemplatePageInfo = new PageInfo<>(formTemplateList);
		PageOutputDto pageOutputDto = new PageOutputDto();
		pageOutputDto.setTotal(formTemplatePageInfo.getTotal());
		pageOutputDto.setList(formTemplateList);
		return pageOutputDto;
	}

	@Override
	public Integer updateContent(FormTemplateInputDto formTemplateInputDto) {
		Integer id = formTemplateInputDto.getId();
		FormTemplate formTemplate = formTemplateDao.selectById(id);
		JSONObject content = formTemplateInputDto.getContent();
		String name = formTemplateInputDto.getName();
		formTemplate.setName(name);
		formTemplate.setContent(content);
		formTemplate.setUsedCustomFieldIds(getUsedCustomFieldId(content));
		String userId = formTemplateInputDto.getUserId();
		// 获取当前用户信息
		EwsUser ewsUser = ewsUserDao.selectById(userId);
		formTemplate.setLastUserId(userId);
		formTemplate.setLastUserName(ewsUser.getName());
		Timestamp time = new Timestamp(System.currentTimeMillis());
		formTemplate.setLastUpdateTime(time);
		Integer result = formTemplateDao.updateContent(formTemplate);
		return result;
	}

	@Override
	public Integer delete(FormTemplate formTemplate) {
		return formTemplateDao.delete(formTemplate);
	}

	@Override
	public FormTemplate selectById(Integer id) {
		return formTemplateDao.selectById(id);
	}

	@Override
	public Integer deleteBatch(List<FormTemplate> formTemplateList) {
		return formTemplateDao.deleteBatch(formTemplateList);
	}

	/**
	 * 获取所有工单模板的id和name
	 * 
	 * @return
	 */
	@Override
	public List<FormTemplate> selectAllFormTemplateIdAndName(String tenantId) {
		return formTemplateDao.selectAllFormTemplateIdAndName(tenantId);
	}

	/**
	 * TODO 获取工单模板信息
	 */
	@Override
	public FormTemplate getFormTemplateByTypeNodeId(String nodeTypeId) {
		return formTemplateDao.selectFormTemplateInfoByNodeTypeId(Integer.valueOf(nodeTypeId));
	}

}
